import { Controller, Inject, Post, Files, Body, Get, Param } from '@midwayjs/core';
import { FileService } from '../service/file.service';
import { UploadMiddleware } from '@midwayjs/busboy';

@Controller('/file')
export class FileController {
    @Inject()
    fileService: FileService;

    /**
     * 上传文件到腾讯云COS
     * @param files 上传的文件
     * @param customPath 自定义存储路径
     */
    @Post('/upload', {middleware: [UploadMiddleware]})
    async upload(@Files() files: Array<{ filename: string; data: Buffer }>) {
        if (!files || files.length === 0) {
          throw new Error('请选择上传文件');
        }
    
        const uploadResults = await Promise.all(
          files.map(file => this.fileService.uploadFile(file))
        );
    
        return {
          code: 200,
          message: '上传成功',
          data: uploadResults
        };
      }

    /**
     * 获取文件访问URL
     * @param key 文件在COS中的Key
     * @param expires 链接有效期（秒），默认3600秒
     */
    @Get('/:date/:fileName')
    async getFileUrl(@Param('date') date: string, @Param('fileName') fileName: string){
        if (!fileName) {
            return {
                code: 400,
                message: '文件key不能为空',
                data: null
            };
        }

        try {
            const url = await this.fileService.getFileUrl(`${date}/${fileName}`);

            console.log('获取文件URL成功:', { fileName, url });
           return url 
            // return {
            //     code: 200,
            //     message: '获取文件URL成功',
            //     data: { url }
            // };
        } catch (error) {
            console.error('获取文件URL失败:', error);
            return {
                code: 500,
                message: `获取文件URL失败: ${error.message}`,
                data: null
            };
        }
    }

    /**
     * 删除COS上的文件
     * @param key 文件在COS中的Key
     */
    @Post('/delete')
    async deleteFile(@Body('key') key: string) {
        if (!key) {
            return {
                code: 400,
                message: '文件key不能为空',
                data: null
            };
        }

        try {
            console.log('开始删除文件:', { key });
            await this.fileService.deleteFile(key);
            
            console.log('删除文件成功:', { key });
            return {
                code: 200,
                message: '删除文件成功',
                data: null
            };
        } catch (error) {
            console.error('删除文件失败:', error);
            return {
                code: 500,
                message: `删除文件失败: ${error.message}`,
                data: null
            };
        }
    }
}